package damas.reglas;

import java.util.LinkedList;
import java.util.List;

import utils.Pair;

import damas.logicaYcontroladores.DamasLogica;
import damas.modelo.DamasEstado;

import framework.IRule;

public class ReglaMover implements IRule<DamasEstado>
{
    int color;
    LinkedList<Pair<Pair<Integer, Integer>, Pair<Integer, Integer>>> listaMovimientos;
    private DamasLogica logica;

    public ReglaMover(DamasLogica logica)
    {
        this.logica = logica;
    }

    public boolean isApplicable(DamasEstado estado)
    {
        color = logica.colorJugadorActual();
        listaMovimientos = estado.movimientosPosibles(color);
        return !listaMovimientos.isEmpty();
    }

    public List<DamasEstado> apply(DamasEstado estado)
    {
        List<DamasEstado> result = new LinkedList<DamasEstado>();
        DamasEstado actual;
        Pair<Integer, Integer> inicio;
        Pair<Integer, Integer> destino;

        for (Pair<Pair<Integer, Integer>, Pair<Integer, Integer>> mov : listaMovimientos)
        {
            actual = estado.clone();
            inicio = mov.getFirstElem();
            destino = mov.getSecondElem();

            while (actual.mover(inicio, destino))
            {
            	inicio = destino;
            	destino = actual.posicionPostComida(inicio);
            }

            result.add(actual);
        }

        return result;
    }

}
